set_atspi_state (&states, ATSPI_STATE_VISIBLE);
+ if (ctx->accessible_role == GTK_ACCESSIBLE_ROLE_WINDOW)
+ {
+ set_atspi_state (&states, ATSPI_STATE_SHOWING);
+ if (gtk_accessible_get_platform_state (accessible, GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE))
+ set_atspi_state (&states, ATSPI_STATE_ACTIVE);
+ }
+
if (ctx->accessible_role == GTK_ACCESSIBLE_ROLE_TEXT_BOX ||
ctx->accessible_role == GTK_ACCESSIBLE_ROLE_SEARCH_BOX ||
ctx->accessible_role == GTK_ACCESSIBLE_ROLE_SPIN_BUTTON)
if (GTK_IS_ROOT (accessible))
{
gtk_at_spi_root_child_changed (self->root, change, accessible);
+ emit_state_changed (self, "showing", gtk_boolean_accessible_value_get (value));
}
else
{
GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED);
emit_state_changed (self, "focused", state);
}
+
+ if (changed_platform & GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE)
+ {
+ gboolean state = gtk_accessible_get_platform_state (GTK_ACCESSIBLE (widget),
+ GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE);
+ emit_state_changed (self, "active", state);
+ }
}
static void
typedef enum {
GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
+ GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE
} GtkAccessiblePlatformState;
typedef enum {
GTK_ACCESSIBLE_PLATFORM_CHANGE_FOCUSABLE = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
GTK_ACCESSIBLE_PLATFORM_CHANGE_FOCUSED = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
+ GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE,
} GtkAccessiblePlatformChange;
typedef enum {
return gtk_widget_get_focusable (GTK_WIDGET (priv->text));
case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
return gtk_widget_has_focus (GTK_WIDGET (priv->text));
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return FALSE;
default:
g_assert_not_reached ();
}
return gtk_widget_get_focusable (GTK_WIDGET (entry->entry));
case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
return gtk_widget_has_focus (GTK_WIDGET (entry->entry));
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return FALSE;
default:
g_assert_not_reached ();
}
return gtk_widget_get_focusable (GTK_WIDGET (entry->entry));
case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
return gtk_widget_has_focus (GTK_WIDGET (entry->entry));
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return FALSE;
default:
g_assert_not_reached ();
}
return gtk_widget_get_focusable (spin_button->entry);
case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
return gtk_widget_has_focus (spin_button->entry);
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return FALSE;
default:
g_assert_not_reached ();
}
if (changed_platform & GTK_ACCESSIBLE_PLATFORM_CHANGE_FOCUSED)
g_print ("*** focused = %d\n",
gtk_accessible_get_platform_state (accessible, GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED));
+ if (changed_platform & GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE)
+ g_print ("*** active = %d\n",
+ gtk_accessible_get_platform_state (accessible, GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE));
}
}
return gtk_widget_get_focusable (GTK_WIDGET (self));
case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
return gtk_widget_has_focus (GTK_WIDGET (self));
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return FALSE;
default:
g_assert_not_reached ();
}
#include "gtkwindowprivate.h"
+#include "gtkaccessibleprivate.h"
#include "gtkaccelgroupprivate.h"
#include "gtkactionable.h"
#include "gtkapplicationprivate.h"
static void gtk_window_root_interface_init (GtkRootInterface *iface);
static void gtk_window_native_interface_init (GtkNativeInterface *iface);
+static void gtk_window_accessible_interface_init (GtkAccessibleInterface *iface);
+
+
static void ensure_state_flag_backdrop (GtkWidget *widget);
static void unset_titlebar (GtkWindow *window);
G_DEFINE_TYPE_WITH_CODE (GtkWindow, gtk_window, GTK_TYPE_WIDGET,
G_ADD_PRIVATE (GtkWindow)
+ G_IMPLEMENT_INTERFACE (GTK_TYPE_ACCESSIBLE,
+ gtk_window_accessible_interface_init)
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
gtk_window_buildable_interface_init)
G_IMPLEMENT_INTERFACE (GTK_TYPE_NATIVE,
G_IMPLEMENT_INTERFACE (GTK_TYPE_ROOT,
gtk_window_root_interface_init))
+static GtkAccessibleInterface *parent_accessible_iface;
+
+static gboolean
+gtk_window_accessible_get_platform_state (GtkAccessible *self,
+ GtkAccessiblePlatformState state)
+{
+ switch (state)
+ {
+ case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE:
+ case GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED:
+ return parent_accessible_iface->get_platform_state (self, state);
+ case GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE:
+ return gtk_window_is_active (GTK_WINDOW (self));
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+gtk_window_accessible_interface_init (GtkAccessibleInterface *iface)
+{
+ parent_accessible_iface = g_type_interface_peek_parent (iface);
+ iface->get_at_context = parent_accessible_iface->get_at_context;
+ iface->get_platform_state = gtk_window_accessible_get_platform_state;
+}
+
static void
add_tab_bindings (GtkWidgetClass *widget_class,
GdkModifierType modifiers,
g_object_unref (focus);
}
+ gtk_accessible_platform_changed (GTK_ACCESSIBLE (window), GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE);
+
g_object_notify_by_pspec (G_OBJECT (window), window_props[PROP_IS_ACTIVE]);
}